use std::{any::{Any, TypeId}, env, fs, io};

use log::{Level, LevelFilter, Log};

/// log库是个日志门面，通过环境变量 rust_log来指定日志级别，不区分大小写
/// 
/// 例如 rust_log="warn"
/// 还有 trace, debug, info, warn, error
/// 
/// 常见的日志实现还有 
/// - log4rs 支持从配置文件读取日志配置
/// - fern 支持链式配置日志
/// - simplelog 支持聚合多种日志实现
pub fn main() {
    // 也可以手动设置 环境变量
    // unix下 方法是unsafe的 windows是safe的
    let v = env::args().skip(1).next().unwrap_or("debug".to_owned());
    env::set_var("RUST_LOG".to_lowercase(), v);
    env_logger::init();
    // log4rs::init_file("log4rs.yaml", Default::default()).unwrap();
    // init_fern();

    // 之前的 log 调用
    log::debug!("Hello, world!");
    log::info!("Hello, world!");
    log::warn!("Hello, {}!","紧闭");
    log::error!("Hello, {:?}!","错误");
}
fn init_fern(){
    let logger = fern::Dispatch::new()
        .format(|out, message, record| {
            out.finish(format_args!(
                "{}[{} {}] {}",
                chrono::Local::now().format("[%Y-%m-%d %H:%M:%S]"),
                record.target(),
                record.level(),
                message
            ))
        })
        .level(LevelFilter::Debug)
        .chain(io::stdout()) // chanin传入 文件 控制台 writer 和 另一个Dispatch对象，自由度很高
        .chain(fern::log_file("log/running-fern.log").unwrap());
    logger.apply().unwrap();

}